﻿/*
 * 点击左侧减号，可以收起此段内容。
 * 
 * 使用本仓库学习，您需要注意：
 * 部分简单的内容可能直接就被使用而不加任何注释。
 * 这要求您自己尝试，自己理解，甚至是自己猜测。
 * 查询文档、参考百度也是一个不错的选择。
 */

/* 
 * 在 B基础语法 章节中，您将学习到 C# 的基础语法。
 * 为了学习方便，我们将主要使用控制台程序。
 * 
 * 正如这个项目：
 * 可以在“解决方案资源管理器”中，右键此项目，点击“属性”，
 * 您可以看到，输出类型为“控制台应用程序”。
 */

/*
 * 在这个项目中，您可以了解到：
 * 如何在控制台输出
 * 如何声明和使用变量
 */

using System;

namespace Ba变量的声明与使用
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * 首先要了解一点：程序会从 Main 方法开始执行。也就是这里开始。
             * 接着程序会一行一行严格执行，除非使用特殊的控制语句，转到其他位置。
             */

            #region 在控制台输出
            System.Console.WriteLine("Hello World!");
            System.Console.WriteLine(123);

            /*
             * 整数 123 和 字符串 "123" 输出是相同的。
             * 但 C# 的类型设计是十分严格的，切不可混淆两者。
             * 
             * 还要注意，虽然任意类型的值都可以被输出，但输出的效果却未必与我们通常所想的相同。
             * 比如当我们尝试输出数组时，并不会输出数组的元素。这个问题我们之后再谈。
             */
            #endregion

            #region 声明变量和读写变量
            {
                /*
                 * 下一句表示声明一个局部变量。
                 * 变量名：helloString
                 * 变量类型：string （字符串） 
                 * 
                 * 变量类型决定了变量当中可以储存那种类型的值，
                 * 编译器和 Visual Studio 也会根据变量类型来判断某些内容是否可用，
                 * 比如你不能将两个字符串相减。
                 * 
                 * 变量具有其“作用域”，在作用域外的位置，不能访问这个变量。
                 * 局部变量的作用域是其所在的一对大括号内（即其所在的代码块内）。
                 */
                string helloString;

                /*
                 * 等于号在 C# 中被称为赋值号。
                 */
                helloString = "Hello!";

                /* 
                 * 由于我们在文件顶部使用了 using System ，此处可以省略 System 。
                 * 
                 * 这句代码会：
                 * 1、取出 helloString 中的内容
                 * 2、输出值
                 */
                Console.WriteLine(helloString);
            }
            /* 
             * 以下语句将产生错误，因为此处已经离开了 helloString 的作用域，不再存在 helloString 变量。
             */
            // Console.WriteLine(helloString);
            #endregion

            #region 赋值语句的更多内容
            {
                /*
                 * int 是 integer 的缩写，储存整数，在 C# 中特指带符号的 32 位整形数字。
                 * 
                 * 想要了解更多信息，可以用鼠标点击下一行中的 int ，使光标移动到其上，随后按下 F1 。
                 */
                int x = 1;
                int y = 1, sum;

                /*
                 * 下一句语句是这样执行的：
                 * 1、获取 x 和 y 的内容
                 * 2、计算 x + y ，得到一个新值
                 * 3、把这个新值赋值给变量 sum
                 */
                sum = x + y;

                Console.WriteLine(sum);

                x = 2;
                Console.WriteLine(x);
                Console.WriteLine(sum);
            }
            #endregion

            #region var关键字的使用
            {
                /*
                 * 以下的代码具有完全相同的效果。
                 * 这只是一个演示，以展现 var 的简化代码效果，暂时不用了解这个类型具体代表什么。
                 */
                System.Reflection.Metadata.Ecma335.CustomAttributeNamedArgumentsEncoder something1 
                    = new System.Reflection.Metadata.Ecma335.CustomAttributeNamedArgumentsEncoder();

                var something2 = 
                    new System.Reflection.Metadata.Ecma335.CustomAttributeNamedArgumentsEncoder();
            }
            #endregion
        }
    }
}
